Computer systems generally communicate with attached hardware and peripheral devices through a basic input output system (BIOS), which includes a set of routines that provide an interface between the operating system and the hardware. The BIOS typically supports all of a computer's peripheral technologies and internal services such as the realtime clock (time and date).
When a computer is booted, the BIOS tests the system and prepares the computer for operation by querying its own memory bank for drive and other configuration settings. The BIOS also searches for other BIOS's on any plug-in boards in the computer and sets up pointers (interrupt vectors) in memory to access those routines. The BIOS also loads the operating system (OS) and passes control to the OS when the BIOS has completed its startup routines. The BIOS accepts requests from device drivers as well as application programs for interfacing with hardware and other peripheral devices.
When the BIOS passes control to the operating system, the BIOS typically includes hardware device and peripheral device configuration information from which the OS interfaces with the attached devices. In order to provide better power management within computer systems, a consortium of companies developed and adopted the Advanced Configuration and Power Interface (ACPI) specification that makes hardware status information available to the operating system. ACPI is an open industry specification that defines a flexible and extensible hardware interface for the system board, and enables a computer to turn its peripherals on and off for improved power management, especially in portable devices such as notebook computers. ACPI also allows a computer to be turned on and off by external devices, so that the touch of a mouse or the press of a key on a keyboard will “wake up” the computer.
The ACPI specification includes hardware interfaces, software interfaces (APIs), and data structures that, when implemented, support OS-directed configuration and power management. Software designers can use ACPI to integrate power management features throughout a computer system, including hardware, the operating system, and application software. This integration enables the OS to determine which devices are active and handle all of the power management resources for computer subsystems and peripherals.
When an ACPI BIOS passes control of a computer to the OS, the BIOS exports to the OS a data structure containing the ACPI name space, which may be graphically represented as a tree. A sample ACPI name space according to the ACPI specification is illustrated in FIG. 1. The name space acts as a directory of ACPI devices connected to the computer, and includes objects that further define or provide status information for each ACPI device. Each node in the tree represents a device, while the nodes, subnodes and leaves represent objects that, when evaluated by the OS, will control the device or return specified information to the OS, as defined by the ACPI specification. The OS, or a driver accessed by the OS, may include a set of functions to enumerate and evaluate name space objects. When the OS calls a function to return the value of an object in the ACPI name space, the OS is said to evaluate that object.
While the ACPI name space is defined by the ACPI specification, it is often difficult to ensure that a BIOS's ACPI name space conforms to the specification. When the name space does not conform to the specification the operating system might not function properly, or might not function at all (i.e. the OS will not boot). Thus, there is a need for a tool that can validate an ACPI name space and identify problems to a developer or original equipment manufacturer (OEM) as they are developing the name space. Also, when a problem in the name space is detected, a tool is needed which will not prohibit an OS from booting.